#include <iostream>
#include <future>
#include <chrono>
#include <thread>

// void Add(int a, int b, std::promise<int> &prom)
// {   
//     prom.set_value(a + b);
//     return;
// }

// int main()
// {
//     std::promise<int> prom;
//     std::future<int> result = prom.get_future(); // 和future互动

//     std::thread th(Add, 1, 2, std::ref(prom));
//     int res = result.get();
//     std::cout << "res:" << res << std::endl;
//     th.join();
//     return 0;
// }

void Add(int a, int b, std::promise<int>& prom)
{
    std::this_thread::sleep_for(std::chrono::seconds(3));
    std::cout << "[子线程] 开始计算 Add(" << a << ", " << b << ")...\n";
    prom.set_value(a + b);
    std::cout << "[子线程] 计算完成并设置结果。\n";
}

int main()
{
    std::promise<int> prom;
    std::future<int> fut = prom.get_future();

    std::cout << "[主线程] 启动子线程...\n";
    std::thread th(Add, 1, 2, std::ref(prom));

    std::cout << "[主线程] 调用 get() 等待结果（会阻塞）...\n";
    int result = fut.get();  // 这里将阻塞，直到 set_value 被调用
    std::cout << "[主线程] get() 返回，结果为：" << result << "\n";

    th.join();
    return 0;
}
